Cryptography involves encoding and decoding information so that only authorized persons can access the information. For example, a data file that contains sensitive financial information may need to be encrypted to prevent unauthorized persons from accessing the financial information. The data file may be encrypted before it is stored in a data storage device and/or before it is transmitted over a data network.
Typically, data is encrypted using a cipher algorithm and an encryption key. In addition, some cipher algorithms combine data to be encrypted with an initial vector to increase the randomness of the encrypted data. Data encrypted in this way is then decrypted using the cipher algorithm, a decryption key and the initial vector.
Several cipher algorithms have been developed for encrypting and decrypting data. Common cryptography standards include Data Encryption Standard (“DES”), triple DES (“3DES”) and Advanced Encryption Standard (“AES”).
Several standards have been developed to secure data transmission over data networks. For example, the Internet Security Protocol (commonly referred to as “IPsec”) may be used to establish secure host-to-host pipes and virtual private networks over the Internet. IPsec defines a set of specifications for cryptographic encryption and authentication.
In general, cipher algorithms are relatively complex and upon execution consume a significant amount of processing power. To offload encryption/decryption processing from a host processor, dedicated hardware devices, commonly referred to as cryptographic accelerators, may be used to perform the cipher algorithms.
Moreover, some cryptographic standards such as IPsec encourage or require that the initial vectors be true random numbers. In practice, some systems that support IPsec operate at very high data rates (e.g., data transfer rates on the order of 1 gigabit per second). However, it may be difficult to generate random numbers quickly enough to support these high data rates. Some conventional systems attempt to generate random numbers at higher rates by using faster sampling rates. However, this approach may adversely affect the randomness of the generated number. Accordingly, a need exists for improved initial vector generation techniques.